/**
 * 漩涡数组
 * 给定一个行 和列，输入 3，4 ，输出：
 * 1,  2,  3,  4,   
 * 10, 11, 12, 5,
*  9,  8,  7,  6,
 * */

function print(n, m) {
  
  const result = new Array(n).fill('').map(() => {
    const line = new Array(m).fill(0)
    return line;
  })
  
  let count = 1;
  let rowArea = [0, n-1];
  let colArea = [0, m-1];
  let add = true; 
  let i = 0; j = 0;
  while(count <= n*m) {
    result[i][j] =  count++; //(''+ count++).padStart(3, ' ');
    if (add) {  // 处理++
      if(j < colArea[1]) {  // 横
        j++;
      } else if(i < rowArea[1]) {  // 竖
        i++;
      }
      if (i == rowArea[1] && j == colArea[1]) {
        rowArea[0] +=1;
        colArea[1] -=1;
        add = false
      }
    } else { // 处理 --
      if(j > colArea[0]) {  // 横
        j--;
      } else if(i > rowArea[0]) {  // 竖
        i--;
      }
      if (i == rowArea[0] && j == colArea[0]) {
        rowArea[1] -=1;
        colArea[0] +=1;
        add = true
      }
    }
    // if (count > n*m) {
    //   break;
    // }
  }
  console.log(result.join('\n'))
  
  return result.join('\n');
}

function vortex(n, m) {
  const result =new Array(n).fill(0).map(() => 
    new Array(m).fill(0)
  ) ;
  let count = 1;
  let i = 0, j = 0;
  let stepI = 0; stepJ = 1; // 每步变化，无非加地是 正数或负数

  function _isBlock() {
    return !result[i+ stepI] || result[i + stepI][ j + stepJ] !== 0
  }
  while(count <= n * m) {
    result[i][j] = count++;
    // if (count > n * m) break;
    if(_isBlock()) {  // 2.何时判断前方有阻碍
      if (stepI === 0) { // 如果当前是横向
        stepI = stepJ;
        stepJ = 0;
      } else {
        stepJ = -stepI;
        stepI = 0;
      }
    }

    // 1. 改变 i 和 j 
    i += stepI;
    j += stepJ;

  }
  console.log(result)
  return result
}

console.time()
// vortex(5,6)
print(5,6)
console.timeEnd()